package sushi.application.components.form; import org.apache.wicket.Component; import org.apache.wicket.MarkupContainer; import org.apache.wicket.behavior.AttributeAppender; import org.apache.wicket.markup.head.IHeaderResponse; import org.apache.wicket.markup.head.JavaScriptReferenceHeaderItem; import org.apache.wicket.markup.html.form.Button; import org.apache.wicket.markup.html.form.FormComponent; import org.apache.wicket.model.Model; import org.apache.wicket.request.resource.JavaScriptResourceReference; /** * This is a form, that raises an alert, if there are unsaved changes in the form. * The proper way is to call submit to avoid the raising of an alert. * @author micha * */ public class WarnOnExitForm extends BlockingForm { static final JavaScriptResourceReference warnOnExit_JS = new JavaScriptResourceReference(WarnOnExitForm.class, "WarnOnExit.js"); public WarnOnExitForm(String id) { super(id); } @Override public MarkupContainer add(Component... childs) { super.add(childs); for(Component component : childs){ if(component instanceof Button){ component.add(new AttributeAppender("onclick", new Model("dontConfirm()"), ";")); } else if (component instanceof FormComponent){ component.add(new AttributeAppender("onChange", new Model("setDirty()"), ";")); } } return this; } @Override public void renderHead(IHeaderResponse response) { super.renderHead(response); response.render(JavaScriptReferenceHeaderItem.forReference(warnOnExit_JS)); } }